
package com.clyme.expediente.servicios;


import com.clyme.expediente.dao.PermisoDao;
import com.clyme.expediente.dao.UsuarioDao;
import com.clyme.expediente.daoImpl.PermisoDaoImpl;
import com.clyme.expediente.daoImpl.UsuarioDaoImpl;
import com.clyme.expediente.entidad.Permiso;
import com.clyme.expediente.entidad.Usuario;
import com.clyme.expediente.hibernate.HibernateConexion;
import com.clyme.expediente.utilitarios.IConexion;
import com.clyme.expediente.utilitarios.Utilitario;
import java.util.HashSet;
import java.util.List;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class LoginServicio {
    
    private final UsuarioDao daoUsuario;
    
    private final IConexion conexion;
    
    private final PermisoDao daoPermiso;

    public LoginServicio() {
        conexion = new HibernateConexion();
        daoUsuario = new UsuarioDaoImpl(conexion);
        daoPermiso = new PermisoDaoImpl(conexion);
    }
    
    
    /** Validaciones del Servicio **/
    public boolean esValido(Usuario usuario){
        conexion.beginConexion();
        boolean resultado = true;
        if(!existeUsuario(usuario)){
            resultado = false;
        }
        if(!resultado){
            conexion.closeConexion();
        }
        return resultado;
    }
    
    public Usuario crearUsuarioSesion(Usuario usuario)
    {
        conexion.beginConexion();
        usuario = (Usuario) daoUsuario.getUsuarioPorNick(usuario.getNick());
        List<Permiso> permisos = daoPermiso.getPermisosPorPerfil(usuario.getPerfil().getId());
        usuario.getPerfil().setPermisos(new HashSet<Permiso>(permisos));
        conexion.closeConexion();
        return usuario;
    }
    
    
    private boolean existeUsuario(Usuario usuario){
        if(!daoUsuario.existeUsuario(usuario)){
            Utilitario.enviarMensajeGlobalError("El usuario y/o clave son incorrectas");
            return false;
        }
        return true;
    }
    
}
